﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sisco.AplicacionEscritorio.Util;

namespace Sisco.AplicacionEscritorio.Equipo.Movimiento
{
    public partial class RegistroMovimiento : Form
    {
        private AccesoDatos.USUARIO usuarioSistema;

        public RegistroMovimiento()
        {
            InitializeComponent();
        }

        public RegistroMovimiento(AccesoDatos.USUARIO usuariosistema) : this()
        {
            usuarioSistema = usuariosistema;
        }

        private void RegistroMovimiento_Load(object sender, EventArgs e)
        {
            LogicaNegocio.TipoMotivoBLL tipoMotivoBLL = new LogicaNegocio.TipoMotivoBLL();
            cmbTipoMovimiento.DataSource = tipoMotivoBLL.Listar();
            cmbTipoMovimiento.ValueMember = "ID";
            cmbTipoMovimiento.DisplayMember = "TIPOMOTIVO1";
            cmbTipoMovimiento.SelectedIndex = -1;

            LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();
            
            cmbUsuarioResponsable.DataSource = usuarioBLL.ListarAsistenteReparador();
            cmbUsuarioResponsable.ValueMember =  "ID";                       
            cmbUsuarioResponsable.DisplayMember = "NOMBRES";
            cmbUsuarioResponsable.SelectedIndex =  -1;

            cmbSupervisadoPor.DataSource = usuarioBLL.ListarAsistenteReparador();
            cmbSupervisadoPor.ValueMember = "ID";
            cmbSupervisadoPor.DisplayMember = "NOMBRES";
            cmbSupervisadoPor.SelectedIndex = -1;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            FormularioBuscar cuadroBuscar = new FormularioBuscar("Equipo");
            cuadroBuscar.ShowDialog(this);

            AccesoDatos.EQUIPO selectedEquipo = cuadroBuscar.ObjetoBuscado as AccesoDatos.EQUIPO;

            if (selectedEquipo != null)
            {
                gbEquipo.Tag = selectedEquipo.ID;
                txtTipoEquipo.Text = selectedEquipo.TIPOEQUIPO1 != null ? selectedEquipo.TIPOEQUIPO1.NOMBRETIPO.Trim() : string.Empty;
                txtMarca.Text = selectedEquipo.MARCA.Trim();
                txtModelo.Text = selectedEquipo.MODELO.Trim();
                txtSerie.Text = selectedEquipo.SERIE.Trim();

                txtFechaRegistro.Text = DateTime.Now.ToShortDateString();
                txtRegistradoPor.Text = usuarioSistema.NOMBRECOMPLETO != null ? usuarioSistema.NOMBRECOMPLETO.Trim() : string.Empty;
            }
        }

        private void tnRegistrar_Click(object sender, EventArgs e)
        {
            bool correcto = false;

            if (gbEquipo.Tag != null)
            {
                if (cmbTipoMovimiento.SelectedIndex >= 0)
                {
                    if (cmbUsuarioResponsable.SelectedIndex >= 0)
                    {
                        if (cmbSupervisadoPor.SelectedIndex >= 0)
                        {
                            correcto = true;
                        }
                        else
                        {
                            MessageBox.Show("Seleccione el campo de supervisión.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Seleccione el campo de usuario responsable.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione el tipo de movimiento.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Seleccione el equipo.", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            if (correcto)
            {
                AccesoDatos.MOVIMIENTO nuevoMovimiento = new AccesoDatos.MOVIMIENTO()
                {
                    IDEQUIPO = int.Parse(gbEquipo.Tag.ToString()),
                    IDTIPOMOTIVO = int.Parse(cmbTipoMovimiento.SelectedValue.ToString()),
                    IDUSUARIORESPONSABLE = int.Parse(cmbUsuarioResponsable.SelectedValue.ToString()),
                    NOMBREUSUARIORESPONSABLE = (cmbUsuarioResponsable.SelectedItem as AccesoDatos.USUARIO).NOMBRECOMPLETO,
                    IDUSUARIOSUPERVISOR = int.Parse(cmbSupervisadoPor.SelectedValue.ToString()),
                    NOMBREUSUARIOSUPERVISOR = (cmbSupervisadoPor.SelectedItem as AccesoDatos.USUARIO).NOMBRECOMPLETO,
                    OBSERVACION = txtObservaciones.Text.Trim(),
                    FECHAREGISTRO = DateTime.Now,
                    REGISTRADOPOR = txtRegistradoPor.Text,
                    ELIMINADO = 0
                };

                LogicaNegocio.MovimientoBLL movimientoBLL = new LogicaNegocio.MovimientoBLL();
                int result = movimientoBLL.Registrar(nuevoMovimiento);

                if (result > 0)
                {
                    DialogResult dr = MessageBox.Show("Movimiento registrado.\n¿Desea registrar otro movimiento?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                    if (dr == DialogResult.Yes)
                    {
                        this.LimpiarFormulario();
                    }
                    else if (dr == DialogResult.No)
                    {
                        this.Close();
                    }
                }
                
            }
        }

        private void LimpiarFormulario()
        {
            gbEquipo.Tag = null;
            txtTipoEquipo.ResetText();
            txtMarca.ResetText();
            txtModelo.ResetText();
            txtSerie.ResetText();
            txtFechaRegistro.ResetText();
            txtObservaciones.ResetText();

            cmbTipoMovimiento.SelectedIndex = -1;
            cmbUsuarioResponsable.SelectedIndex = -1;
            cmbSupervisadoPor.SelectedIndex = -1;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
